// 导入uni-id-common模块和数据库
// 使用相对路径引用uni_modules中的模块
const uniID = require('../../../../uni_modules/uni-id-common/uniCloud/cloudfunctions/common/uni-id-common/index.js');
const db = uniCloud.database();
// 导入配置中心
const createConfigCenter = require('../../../uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/index.js');

/**
 * 发布动态
 * @param {Object} event 客户端传入的参数
 * @param {String} event.token 用户token
 * @param {String} event.content 动态内容
 * @param {Array} event.images 图片列表（云存储fileID）
 * @param {Array} event.topics 话题列表
 * @param {String} event.privacy 隐私设置：public/followers/private
 * @param {Object} context 上下文信息
 */
exports.main = async (event, context) => {
  const { token, content, images = [], topics = [], privacy = 'public' } = event;
  
  // 初始化配置中心并获取uni-id配置
  const config = createConfigCenter({ pluginId: 'uni-id' });
  const uniIdConfig = config.config();
  
  // 初始化uniID实例
  const uniIDIns = uniID.createInstance({
    context,
    config: uniIdConfig
  });
  
  // 校验参数
  if (!token) {
    return {
      code: 1,
      message: '请先登录'
    };
  }
  
  if (!content && images.length === 0) {
    return {
      code: 1,
      message: '内容或图片不能为空'
    };
  }
  
  if (content && content.length > 200) {
    return {
      code: 1,
      message: '内容不能超过200个字符'
    };
  }
  
  if (images.length > 9) {
    return {
      code: 1,
      message: '图片不能超过9张'
    };
  }
  
  if (!['public', 'followers', 'private'].includes(privacy)) {
    return {
      code: 1,
      message: '隐私设置无效'
    };
  }
  
  try {
    // 校验token
    const checkTokenRes = await uniIDIns.checkToken(token);
    if (checkTokenRes.code) {
      return {
        code: checkTokenRes.code,
        message: checkTokenRes.errMsg || '登录状态失效，请重新登录'
      };
    }
    
    // 获取用户ID
    const userId = checkTokenRes.uid;
    
    // 查询用户信息，用于存储到动态中
    const userRes = await db.collection('uni-id-users').doc(userId).get();
    if (!userRes.data) {
      return {
        code: 1,
        message: '用户不存在'
      };
    }
    
    // 构建动态数据
    const postData = {
      userId: userId,
      userInfo: {
        nickname: userRes.data.nickname || '用户' + userId.substring(0, 6),
        avatar: userRes.data.avatar || ''
      },
      content: content || '',
      images: images,
      topics: topics,
      privacy: privacy,
      createTime: new Date().getTime(),
      likeCount: 0,
      commentCount: 0,
      shareCount: 0
    };
    
    // 存储动态到数据库
    const dynamicCollection = db.collection('dynamic_posts');
    const result = await dynamicCollection.add(postData);
    
    // 查询插入后的动态数据（包含自动生成的_id）
    const newPostRes = await dynamicCollection.doc(result.id).get();
    
    // 如果有话题，更新话题参与人数（假设存在topics集合）
    if (topics.length > 0) {
      const topicsCollection = db.collection('topics');
      for (const topicName of topics) {
        // 尝试更新话题参与人数，如果话题不存在则创建
        try {
          await topicsCollection.where({
            name: topicName
          }).update({
            count: db.command.inc(1)
          });
        } catch (error) {
          console.error('更新话题参与人数失败:', error);
        }
      }
    }
    
    return {
      code: 0,
      message: '发布成功',
      data: newPostRes.data
    };
  } catch (error) {
    console.error('发布动态失败:', error);
    return {
      code: 1,
      message: '发布失败，请重试',
      data: error.message
    };
  }
};